package cn.liye.pingfen.service.impl;

import cn.liye.pingfen.mapper.ComReviewsMapper;
import cn.liye.pingfen.mapper.CompanyMapper;
import cn.liye.pingfen.pojo.dto.ComReviewsDTO;
import cn.liye.pingfen.pojo.dto.CompanyAddDTO;
import cn.liye.pingfen.pojo.dto.CompanyUpdateDTO;
import cn.liye.pingfen.pojo.entity.ComReviews;
import cn.liye.pingfen.pojo.entity.Company;
import cn.liye.pingfen.pojo.vo.CompanyIndexVO;
import cn.liye.pingfen.pojo.vo.CompanyVO;
import cn.liye.pingfen.pojo.vo.TbZhiWeiVO;
import cn.liye.pingfen.service.ICompanyService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
public class CompanyService implements ICompanyService {

    @Autowired
    CompanyMapper companyMapper;

    @Autowired
    ComReviewsMapper comReviewsMapper;


    //假设CompanyAddDTO包含了创建评论所需的所有信息，或者你需要从其他地方获取这些信息
    @Transactional
    public void insertCompany(CompanyAddDTO companyAddDTO, ComReviewsDTO comReviewsDTO) {
        String words[] = {"畜生", "牛逼", "垃圾","共产党","傻逼","他妈的","操你妈"};
        String str1 = companyAddDTO.getDetailedDescription();
        for (int i = 0; i < words.length; i++) {
            if (str1.matches(".*" + words[i] + ".*")) {
//          计算需要的*的个数
                String s = "";
                for (int j = 0; j < words[i].length(); j++) {
                    s += "*";
                }
                str1 = str1.replaceAll(words[i], s);
                System.out.println(str1);
            }
        }
        // 创建Company对象并设置属性
        Company company = new Company();
        BeanUtils.copyProperties(companyAddDTO, company);
        company.setCreateTime(new Date());
        company.setDetailedDescription(str1);
        company.setUserId(companyAddDTO.getUserId());

        // 插入Company记录
        companyMapper.insertCompany(company);

        String str = comReviewsDTO.getDetailedDescription();
        for (int i = 0; i < words.length; i++) {
            if (str.matches(".*" + words[i] + ".*")) {
//          计算需要的*的个数
                String s = "";
                for (int j = 0; j < words[i].length(); j++) {
                    s += "*";
                }
                str = str.replaceAll(words[i], s);
                System.out.println(str);
            }
        }

        // 假设ComReviewsDTO包含与Company相关的评论信息，并且需要设置companyId
        ComReviews comReviews = new ComReviews();
        BeanUtils.copyProperties(comReviewsDTO, comReviews);
        comReviews.setCompanyId(company.getCompanyId()); // 假设Company的ID在插入后可用，如通过主键生成策略
        comReviews.setCreateTime(new Date()); // 可能还需要设置评论的创建时间
        comReviews.setDetailedDescription(str);

        // 插入comReviews记录
        comReviewsMapper.insert(comReviews); // 假设这是插入评论的方法名

        // 如果以上两个操作都成功，事务将自动提交
        // 如果任何一个操作失败并抛出异常，事务将自动回滚
    }




    @Override
    public PageInfo<CompanyVO> selectCompanyList(String companyName, int pageNum, int pageSize) {
        // 开启分页，pageNum 是页码（从1开始），pageSize 是每页显示的记录数
        PageHelper.startPage(pageNum, pageSize);
        // 调用Mapper方法获取分页后的数据列表
        List<CompanyVO> companyVO = companyMapper.selectCompanyList(companyName);
        // 使用PageInfo包装查询结果，PageInfo提供了很多分页相关信息
        PageInfo<CompanyVO> pageInfo = new PageInfo<>(companyVO);
        return pageInfo;
    }

    @Override
    public PageInfo<CompanyIndexVO> selectCompanyListList(CompanyIndexVO companyIndexVO, int pageNum, int pageSize) {
        // 开启分页，pageNum 是页码（从1开始），pageSize 是每页显示的记录数
        PageHelper.startPage(pageNum, pageSize);
        // 调用Mapper方法获取分页后的数据列表
        List<CompanyIndexVO> companyList = companyMapper.selectCompanyListList(companyIndexVO);

        // 使用PageInfo包装查询结果，PageInfo提供了很多分页相关信息
        PageInfo<CompanyIndexVO> pageInfo = new PageInfo<>(companyList);


        // 返回PageInfo对象，它包含了分页后的数据列表以及分页相关信息
        return pageInfo;
    }


    @Override
    public List<TbZhiWeiVO> selectZhiWeiList(TbZhiWeiVO tbZhiWeiVO) {
        return companyMapper.selectZhiWeiList(tbZhiWeiVO);
    }


//    // 计算分数的方法
//    public int calculateScore(double stars) {
//        // 确保星星数量在有效范围内（0到10之间）
//        stars = Math.min(stars, 10);
//
//        // 先将半颗星星算作整颗星星计算
//        int fullStars = (int) stars;
//
//        double halfStars = stars - fullStars;
//
//        // 计算分数（每个星星1分）
//        int score = fullStars;
//
//        // 确保分数不超过10分
//        score = Math.min(score, 10);
//
//        return score;
//    }


    // 计算分数的方法
    public int calculateScore(double stars) {
        // 确保星星数量在有效范围内（0到5之间）
        stars = Math.min(stars, 5);

        // 先将半颗星星算作整颗星星计算
        int fullStars = (int) stars;
        // 剩余部分为半颗星星
        double halfStars = stars - fullStars;

        // 计算分数（每个星星2分，半颗星星1分）
        int score = fullStars * 2 + (halfStars > 0 ? 1 : 0);

        // 确保分数不超过10分
        score = Math.min(score, 10);

        return score;
    }

    @Override
    public Double AUG(CompanyUpdateDTO companyUpdateDTO) {
        Double sum = comReviewsMapper.selectsum(companyUpdateDTO.getCompanyId());
        int count = comReviewsMapper.selectcount(companyUpdateDTO.getCompanyId());

        // 防止除以零的异常
        Double aug = sum / count;
        System.out.println(aug);

        // 假设 Company 类有一个 aug 字段
        Company company = new Company();
        company.setCompanyId(companyUpdateDTO.getCompanyId()); // 设置正确的ID
        company.setCompanyRating(aug); // 设置计算出的 aug 值

        // 假设 companyMapper 有一个 updateAugById 方法
        companyMapper.updateAug(company);
        return aug;
    }
}
